package PERSONAJES;
import java.awt.Graphics;
import java.io.Serializable;
import java.util.*;

import INTERFAZ.Dibujador;
import JUEGO.Juego;
import UTILIDADES.Comparador;


public class Batallon implements Serializable{
	private int bando;
	private int atk, def;
	
	private ArrayList<Personaje> personaje = new ArrayList<Personaje>();
	private int hp;
	
	
	public void setBando(int bando) {
		this.bando = bando;
	}


	public Personaje getPersonaje(int i) {
		return personaje.get(i);
	}

	
	public int getNpersonajes() {
		return personaje.size();
	}

	public int getAtk() {
		return atk;
	}

	public int getDef() {
		return def;
	}
	public int getHP() {
		return hp;
	}
	
	public void setHP(int hp) {
		 this.hp=hp;
	}
	
	
	public int getbando() {
		return bando;
	}
	
	public Batallon(int x, int y, int rabonas,int indigenas,int fusileros,int infanteria,int artilleria,int heroe, int bando){
		this.bando=bando;
		for (;rabonas-->0;){personaje.add(new Personaje(1));}
		for (;indigenas-->0;){personaje.add(new Personaje(2));}
		for (;fusileros-->0;){personaje.add(new Personaje(3));}
		for (;infanteria-->0;){personaje.add(new Personaje(4));}
		for (;artilleria-->0;){personaje.add(new Personaje(5));}
		for (;heroe-->0;){personaje.add(new Personaje(6));}
		//this.numbat = numbat;
		this.atk = actualizaataque();
		this.def = actualizadefensa();
		this.hp=actualizaHP();
		if (bando==2)Juego.setEnemigosXY(Juego.getNumEnemigos(), x, y);
		
	}
	public void ordenar_personaje(){
		Comparator<Personaje> comparador=new Comparador();
		Collections.sort(personaje,comparador);
		
	}
	
	
	
	
	public int actualizaHP(){
		int sumaHP = 0;
		for (int j = 0; j < this.getNpersonajes(); j++){
			sumaHP +=personaje.get(j).getVidaActual();
		}
		return sumaHP;
	}
	
	public int actualizaataque(){
		int sumaataque = 0;
		
		for (int j = 0; j < this.getNpersonajes(); j++){
			sumaataque = sumaataque + personaje.get(j).ataqueTotalPersonaje();
		}
		return sumaataque;
	}
	
	
	public int actualizadefensa(){
		int sumadefensa = 0;
		for (int j = 0; j < this.getNpersonajes(); j++){
			sumadefensa = sumadefensa + personaje.get(j).defTotalPersonaje();
		}
		return sumadefensa;
	}
	
	public void recibedano(int ataque, int x, int y,int bando){
		int dano;
		dano = (ataque<def)?0:ataque - this.def;
		int npersonajes=this.getNpersonajes();
		for (int j = 0; j < npersonajes; j++){
			personaje.get(j).setVidaActual(personaje.get(j).getVidaActual()-dano);
		}
		chequeavida(x, y,bando);
		this.hp=actualizaHP();
	}
	
	public void agregapersonaje(int tipo,int hpPer){
		personaje.add(new Personaje(hpPer,tipo));
	}
	
	public void chequeavida(int x, int y,int bando){
		
		for (int j = 0; j <getNpersonajes();){
			//System.out.println(personaje.get(j).getTipo()+personaje.get(j).getVidaActual());
			if (personaje.get(j).getVidaActual() <= 0){
				if(personaje.get(j).getTipo()==6)Juego.GameOver();
				personaje.remove(j);
				
			}
			else j++;
		}	
		if (getNpersonajes() == 0) Juego.MuerteBatallon(x, y,bando);	
		
	}
	
	public void curacion(Dibujador dib){
		int curatotal = 0;
		for (int i = 0; i < this.getNpersonajes(); i++){
			curatotal = curatotal + personaje.get(i).getCuracion();
		}
		if (curatotal == 0) dib.setCurada(2);
		else{
			for (int j = 0; j < this.getNpersonajes(); j++){
				if((personaje.get(j).getVidaActual() + curatotal)>= personaje.get(j).getVidaMax()){
					personaje.get(j).setVidaActual(personaje.get(j).getVidaMax());
				}
				else{
					personaje.get(j).setVidaActual(personaje.get(j).getVidaActual() + curatotal);
				}
			}
			setHP(actualizaHP());
			dib.setCurada(1);
		}
	}
	
	
}